<?php

require_once ("LoginHandler.php");
require_once ("RegisterHandler.php");
require_once ("Validation.php");
require_once ("Database.php");
require_once ("dbconfig.php");


	class AllTests{
		
		//Test-serie
		public function Test(){
			
			$db = new Database();
			$dbconfig = new dbconfig();
			$lh = new LoginHandler($db);
			$rh = new RegisterHandler($db);
			$val = new Validation();
			
			//Testar Databasen
			$body = "<h2>Testar Databasen...</h2>";
			
				if(!$db->Connect($dbconfig)){
					$body .= "Databas-connect fel..";	
				}			
						
				$stmt = $db->Prepare("SELECT COUNT(*) FROM user");			
				if(!$numberOfPostBefore = $db->SelectOne($stmt)){
					$body .= "<p>Databas SelectOne failed. Fel1</p>";	
				}
				
				if(!$stmt = $db->Prepare("INSERT INTO user (userName, password) VALUES ('Edvardo98', 'Luddsde5')")){
					$body .= "Prepare failed..";
				}
				if(!$db->RunInsertQuery($stmt)){
					$body .= "RunInsertQuery failed..";
				}
				
				$stmt = $db->Prepare("SELECT COUNT(*) FROM user");			
				if(!$numberOfPostAfter = $db->SelectOne($stmt)){
					$body .= "<p>Databas SelectOne failed. Fel2</p>";	
				}
					
				if ($numberOfPostBefore +1 != $numberOfPostAfter) {
					$body .= "<p>Prepare or RunInsertQuery failed</p>";
				}
				
				$stmt = $db->Prepare("DELETE FROM user WHERE userName='Edvardo98'");			
				if (!$db->RunQuery($stmt)){
					$body .= "<p>Database RunQuery failed</p>";
				}
				
			//Testar LoginHandler	
			$body .= "<h2>Testar loggin-hantering...</h2>";
					
				$lh->DoLogout();
				
				if($lh->IsLoggedIn() == true){
					$body .= "<p>IsLoggedIn fel</p>";	
				}
				
				if($lh->DoLogin("fel", "fel")){
					$body .= "<p>DoLogin: Gick att logga in med fel uppgifter.</p>";	
				}
				
				if(!$lh->DoLogin("Klas", "Bananen")){
					$body .= "<p>DoLogin: Gick ej att logga in med rätt uppgifter.</p>";						
				}
				
				if($lh->IsLoggedIn() == false){
					$body .= "<p>IsLoggedIn: Är inte inloggad efter lyckad inloggning.</p>";					
				}
				
				$lh->DoLogout();
				
				if($lh->DoLogin("Klas", "Bananen") == false){
					$body .= "<p>DoLogin: Gick ej att logga in med rätt uppgifter nr2</p>";						
				}
				
				$lh->DoLogout();

			//Testar RegisterHandler								
			$body .= "<h2>Testar Användarregistrering...</h2>";
			
				if($rh->UserNameCompare("Klas")){
					$body .= "<p>UserNameCompare misslyckades</p>";										
				}
				
				if(!$rh->SaveUser("Klasson56", "Bananen")){
					$body .= "<p>SaveUser misslyckades</p>";											
				}
				
				if($rh->SaveUser("Klasson56", "Tre")){
					$body .= "<p>SaveUser misslyckades: Sparades trots för kort lösenord</p>";											
				}
				
				if($rh->SaveUser("", "sssaTre")){
					$body .= "<p>SaveUser misslyckades: Sparades trots inget användarnamn</p>";											
				}								
			
			//Testar LoginHandler				
			$body .= "<h2>Testar borttagning av användare...</h2>";			
				
				if(!$lh->DeleteUser("Klasson56")){
					$body .= "<p>DeleteUser misslyckades: Fel1</p>";
				}
				if($lh->DeleteUser("Klasson56")){
					$body .= "<p>DeleteUser misslyckades: Fel2</p>";
				}			

			//Testar stängning av Databas				
				if ($db->Close() == false) {
					$body .= "<p>Database Close failed</p>";
				}
				
			//Testar Validering				
			$body .= "<h2>Testar validering..</h2>";			
				
				if($val->ValidateUserName("")){
					$body .= "<p>ValidateUserName misslyckades: Fel1</p>";
				}
				
				if($val->ValidateUserNameChar("Klas/&#¤%")){
					$body .= "<p>ValidateUserNameChar misslyckades: Fel2</p>";
				}
				
				if($val->ValidatePassword("Klas2")){
					$body .= "<p>ValidatePassword misslyckades: Fel1</p>";
				}
				
				if($val->ValidatePasswordChar("Klas/&#¤%")){
					$body .= "<p>ValidatePassword misslyckades: Fel2</p>";
				}
				
				if($val->ComparePassword("bananen2", "bananen")){
					$body .= "<p>ComparePassword misslyckades: Fel1</p>";
				}				
																			
									
			
			return $body;			
		}
	
	}
	
